﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//main135&136：循环写入多行字符串内容到文件
int main135()
{
	char fileName[256];
	printf("1.请您输入一个需要创建的文件，即创建文件名加上后缀格式：\n");
	scanf("%s", fileName);//E:\file\VIEditor.txt-->E:\file\VIEditorFileManyString.txt
	//8.需要接收一个换行；
	getchar();
	FILE* fp = fopen(fileName, "w");
	if (fp == NULL)
	{
		return -1;
	}
	//2.接收字符串的空格的两种方式：
	//scanf("%[^\n]", buf);
	//fgets();

	//3.创建文件后，接收字符串，写入到文件中；
	//char buf[1024];
	//4.memset清空字符数组buf；
	//memset(buf, 0, 1024);

	//printf("9.请您输入要写入的字符串：\n");
	//scanf("%[^\n]", buf);
	//int i = 0;
	//5.字符串的结束标志\0，当字符数组元素不为\0时，即字符串没结束；
	/*while (buf[i] != '\0')
	{
		//6.向文件中写入字符；
		/ *fputc(buf[i], fp);
		i++;* /
		fputc(buf[i++], fp);
	}*/

	//10.上面的代码，只能表示每次写入一行字符串。现在改成写入多行字符串，输入comm=exit时结束写入；
	char buf[1024];
	while (1)
	{
		printf("11.请输入您要写入文件的字符串内容，输入comm=exit时结束写入：\n");
		memset(buf, 0, 1024);
		//scanf("%[^\n]", buf);
		//12.换成标准输入流了，我也不太明白反正人家就是这么写的；查了一下，发现基本都是下面这样的写法；
		fgets(buf, 1024, stdin);

		//if (strcmp("comm=exit", buf) == 0)
			//13.主要时字符串comm=exit结尾会多一个\0，而录入字符串时，就不会录入\0，所以才只比较9个有效字符；
		if (strncmp("comm=exit", buf, 9) == 0)
		{
			break;
		}

		int i = 0;
		while (buf[i] != '\0')
		{
			fputc(buf[i++], fp);
		}
	}

	//7.关闭文件；
	fclose(fp);

	system("pause");
	return EXIT_SUCCESS;
}
int main136(void)
{
	//1.指定一个文件名；
	char fileName[256];
	printf("8.请输入文件名：\n");
	scanf("%s", fileName);
	//9.注意问题：用来接收换行；
	getchar();
	//2.打开文件；
	FILE* fp = fopen(fileName, "w");//E:\file\VIEditorCode.txt
	//3.判断文件可用性；
	if (!fp)
	{
		return -1;
	}
	//4.循环录入内容；
	char buf[1024];
	while (1)
	{
		printf("12.请输入您要写入文件的字符串内容，输入comm=exit时结束写入：\n");
		memset(buf, 0, 1024);
		//10.fgets函数，当录入的字符串小于1024时，会自动在录入的字符串后面加上结束标识，也就是\0；
		fgets(buf, 1024, stdin);
		//5.退出命令；comm=exit，或者quit；有限比较，只比较前9个字符；
		if (!strncmp("comm=exit", buf, 9))
		{
			break;
		}
		//6.将字符串写入文件中；
		int i = 0;
		while (buf[i] != '\0')
		{
			fputc(buf[i++], fp);
		}
		//11.更新缓冲区，防止程序意外关闭，内容未保存；
		fflush(fp);
	}
	//7.关闭文件；
	fclose(fp);
	return 0;
}
